package com.itheima.book.manager.entry;

import com.itheima.book.manager.controller.BaseBookController;
import com.itheima.book.manager.controller.Book2Controller;
import com.itheima.book.manager.controller.BookController;

import java.util.Random;

/**
 * 程序的入口类，提供一个main方法，创建BookController对象，启动程序
 */
public class BookManagerEntry {

    // 程序的入口方法
    public static void main(String[] args) {

        // 调用BookController中的start方法
        // 1. 创建BookController的对象
        // 创建对象的格式：类名 变量名称 = new 类名();
//        BookController bookController = new BookController() ;
//        Book2Controller bookController = new Book2Controller() ;

        // 2. 调用start方法启动程序
//        bookController.start();

        /**
         * 需求：当程序启动起来以后，我们需要随机去切换去使用这两个界面；
         */

        /**
         * 思路：
         *
         * 1. 使用Random生成一个(0-1)随机数
         * 2. 然后进行判断，如果是0创建Book1Controller对象，调用start方法
         * 3. 如果是1创建Book2Controller对象，然后调用start方法
         */



        // 2. 然后进行判断，如果是0创建Book1Controller对象，调用start方法
//        switch (nextInt) {
//            case 0 :
//                BookController bookController = new BookController();
//                bookController.start();
//                break;
//            case 1 :
//                Book2Controller book2Controller = new Book2Controller();
//                book2Controller.start();
//                break;
//        }

        BaseBookController baseBookController = getBaseBookController();
        baseBookController.start();

        /**
         * 分析：我们要想实现界面的切换本质上我们只需要去随机创建对应的controller的对象即可。
         * 创建对一个最为核心的东西应该是：
         *
         * BookController bookController = new BookController();
         *
         * "="右边的东西，那么也就是说左边的东西我们可以不用做过多的关注。 但是由于我们现在技术的局限性我们在创建"="右边这个对象的同时，我们需要去
         * 修改左的内容； 那么我们可以不可以做到，只修改我们"="号右边的内容，而不修改"="号左边的内容呢？当然可以
         *
         * 怎么实现呢？ 需要去使用多态
         *
         */

        /**
         * 程序中如何去写出动态的代码，要想写出多态的代码，我们必须要有一定的前提：
         *
         * 1. 需要存在继承或者实现的关系
         * 2. 需要存在方法重写(如果没有方法重写，多态没有意义，因为不同的行为就是通过方法重写进行实现的)
         * 3. 父类的引用指向子类对象
         *
         * public class Fu {}
         *
         * public class Zi extends Fu {
         *
         *     // 重写方法
         *
         * }
         *
         * 之前在创建对象的时候：          Zi zi = new Zi();
         * 通过多态的形式实现对象的创建：   Fu fu = new Zi();
         */


    }

    public static BaseBookController getBaseBookController() {

        // 使用Random生成一个(0-1)随机数
        // 1. 创建Random类的对象
        Random random = new Random() ;
        int nextInt = random.nextInt(2);
        switch (nextInt) {
            case 0 :
                return new BookController();
            case 1 :
                return new Book2Controller();
        }

        return null ;

    }

}
